package com.wxp.demo08.list.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.wxp.demo08.R;
import com.wxp.demo08.list.model.PlanetModel;
import com.wxp.demo08.util.CollectionUtils;
import com.wxp.demo08.util.ToastUtil;

import java.util.List;

/**
 * 行星列表按钮 适配器
 */
public class PlanetListWithButtonAdapter extends BaseAdapter {

    /**
     * 当前上下文对象
     */
    private Context mContext;
    /**
     * 行星数据列表
     */
    private List<PlanetModel> mPlaneList;

    public PlanetListWithButtonAdapter(Context mContext, List<PlanetModel> mPlaneList) {
        this.mContext = mContext;
        this.mPlaneList = mPlaneList;
    }


    /**
     * 获取列表数量
     *
     * @return 列表数量
     */
    @Override
    public int getCount() {
        return CollectionUtils.isEmpty(mPlaneList) ? 0 : mPlaneList.size();
    }

    /**
     * 获取列表项
     *
     * @param position 当前数据下标
     * @return 列表项
     */
    @Override
    public Object getItem(int position) {
        if (CollectionUtils.isEmpty(mPlaneList)) {
            return null;
        }
        return mPlaneList.get(position);
    }

    /**
     * 获取列表项id
     *
     * @param position 当前数据下标
     * @return 当前数据下标
     */
    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 获取视图信息
     *
     * @param position    当前数据下标
     * @param convertView 当前视图对象
     * @param parent      父级视图组
     * @return 视图信息
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        //判断是否初始化
        if (convertView == null) {
            // 根据布局文件item_list.xml生成转换视图对象
            convertView = LayoutInflater.from(mContext).inflate(R.layout.item_list_with_button, null);
            holder = new ViewHolder();
            holder.iv_icon = convertView.findViewById(R.id.iv_icon);
            holder.tv_name = convertView.findViewById(R.id.tv_name);
            holder.tv_desc = convertView.findViewById(R.id.tv_desc);
            holder.ll_item = convertView.findViewById(R.id.ll_item);
            holder.btn_oper = convertView.findViewById(R.id.btn_oper);
            // 将视图持有者保存到转换视图当中
            convertView.setTag(holder);
        } else {
            //第N次进入，直接复用之前的视图对象
            holder = (ViewHolder) convertView.getTag();
        }

        // 给控制设置好数据
        PlanetModel planet = mPlaneList.get(position);
        holder.iv_icon.setImageResource(planet.image);
        holder.tv_name.setText(planet.name);
        holder.tv_desc.setText(planet.desc);

        //blocksDescendants可阻止下级控件获得焦点，避免堵塞列表视图的点击事件
        holder.ll_item.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        //设置点击事件
        holder.btn_oper.setOnClickListener(v -> {
            ToastUtil.show(mContext, "按钮被点击了，" + planet.name);
        });

        return convertView;
    }

    /**
     * 视图处理器
     */
    public final class ViewHolder {
        public LinearLayout ll_item;
        public ImageView iv_icon;
        public TextView tv_name;
        public TextView tv_desc;
        public Button btn_oper;
    }

}
